■文章編12      ┏━━━━━━━━━━━━━━━━━━━━━━━━┓      ┃ ┃      ┃ レイトレ・マジック ┃      ┃ ┃      ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ ■レイトレーシング 前もってお断りしておきますが,僕はこのレイトレーシングが「苦手」です。 何が苦手って,あの,直方体や球や円錐の座標を数値で表して,andやxorで 形がああなって,色がどうなって,とソースをいじっていくうちに人の形やら DNAモデルやらが美しく出力されてしまう,あの空間感覚がまさに神業にし か思えないのです。 ずうっと以前,FM-11やFM77AV用レイトレーシングツールを本誌に掲 載されていたG・コバヤシ氏が,エンジンのデータのソースを作るところを後 ろから覗いていて「嘘だ。手品だ。ハンドパワーだ(←当時まだこんな言葉は なかった)」と目を疑った記憶があるくらいですから,ここでこれから説明す る言葉たちは,用語ロジィの筆者としては極めて不本意ながら,隅から隅まで 身体に染みついたものばかりではありません。それはつまり・・・・本などで調べ てしのいだ部分もなくはない,ということです。ごめんなさい。 ・・・・さて,前もって言いわけはきちんとすませましたから,安心してさっそ く始めましょう。プロ,もしくはセミプロのみなさん,不備を発見しても余計 なツッコミは無用ですよ(・・・・コラコラ)。 「CG(コンピュータグラフィックス)」という言葉は,もはや最近ではコン ピュータに詳しくない方にも通じる一般用語になりつつあると思います。ディ スプレイに向かい,マウスとグラフィックエディタを使って自由にぐりぐりぬ りぬり描くもよし,これから説明するレイトレーシングツールなどのレンダラ を使ってしゃんしゃん計算させて描くもよし,ともかくコンピュータを操作し て構築する縦×横で厚みのない「2次元の絵」のことです。 このCGをいわゆる「フリーハンド」で描くツールを,一般にグラフィック エディタといいますが,これは,大きく「ペイント系」と「ドロー系」に分か れます。 TownsPaintIIやmanyCOLORS,ARTemisやNORA-PAINT, 乙女座等,画面上の任意の点にカーソルをもっていって自由に線を引き,色を 塗っていくものがペイント系です。従来の画材である紙やカンバス,ペンや絵 筆,そしてインクや絵の具をコンピュータ上でシミュレートしていると考えれ ばいいでしょう。 一方,花子やCANDY,そしてTownsPaintIIの一部の機能ように,線の 始点・終点の座標データや,引かれた順など,絵の描かれる「過程」そのもの を逐一データとして記録していき,その結果をCGとして表示するものがドロ ー系で,こちらは,拡大・縮小しても部分の精度や美しさが保たれること,中 途の過程における線や面を後からエディットできるところに特徴があります。 ビデオディジタイザで自然画を取り込んでそれに手を加えたり,「不思議の 海のナディア」や「美少女戦士セーラームーン」などのアニメキャラクタを描 くにはペイント系が有利,論文のための回路図や,CADもどきの設計図等を 描くためにはドロー系が有利,といったところでしょうか(最近は,アニメデ ータも,ドロー系で描いてそれをベースに動きを表すという手法が使われてい るようで,こんな単純な分け方では論じきれないものがあるようですが)。 さて,CGを描く方法には,これらの「2次元の画面に直接絵を描く」グラ フィックエディタ系のプログラムとは全く異なった,いかにもコンピュータら しい,3次元の数値データを元に複雑怪奇な計算を行って画面に点や線や面を 描いていき,結果として2次元の絵を実現する方法があります。その方法で描 かれたCGには,フリーハンドで描いたものとは異なる,いかにもCGらしい 正確な遠近感,なめらかな面,くっきりした陰影,明確にして独特なタッチ, 非現実感,といった特徴が現れます。 このように,3次元のデータから計算によって2次元のCGを描くプログラ ムを,render(=描写・演出)という言葉から広く「レンダラ」といい,その 計算方法というかノウハウを「レンダリングアルゴリズム」といいます。ちな みに,3次元の物体の数値データを構築するのは人間にとってかなり大変な力 ワザで,それを作成するお手伝いをするプログラムのことを,一般に「モデラ」 といいます。Z'sTRIPHONY DIGITAL CRAFTや最近登場し たQubicSketchなどの3Dツールは,さしずめパソコン上で3次元CGを楽 しむための「モデラ」と「レンダラ」がセットになってパッケージ化されたも の,と考えるとわかりやすいでしょう。 さて。この「レンダラ」のうち,パソコン上で最も普及しているものの1つ に「レイトレーシング」というものがあります。・・・・ようやく,本題に到達し ました。レイトレーシング,ray tracingとは,はたして,何か。 一般に,レイトレーシングアルゴリズムは「光線追跡法」とか「視線探索法」 と訳され,ごく大雑把に説明しますと, ある光源と,物体と,視点を想定し,その視点から引かれた無数の直線が 視野の中のあらゆる方向に進むうち,あるものは物体に当たって透過・反 射し,またあるものは吸収され,・・・・という具合なのを計算によって求め, 視野にどのような2次元データが見えるのかを求めるもの です。この2次元データを得るまでの計算はなかなか時間のかかる重い処理で, その計算を少しでも高速にするためのテクニックも山ほど考え出されています が,基本的には,まあ,こういったものです。 さて,レイトレーシングに関連する用語をいくつか,駆け足で追ってみまし ょう。 〔マッピング(mapping)〕 レイトレーシングを用いて3次元物体を描く際に,ほかからもってきた2次 元データをその3次元物体の面に貼り付けること。 〔エリアシング(aliasing)〕 コンピュータは,何ごとも1か0かの2値(デジタル)でしか表せません。 データを限りなくアナログに近づけようとしても,必ずそこには誤差からズレ や濁りにあたるものが生じてしまいます。この問題をレイトレーシングではと くにエリアシングとよんで大きなテーマとして扱っています。このエリアシン グを除去するノウハウがアンチエリアシングで,計算時にノイズを避けながら 計算する方法と,でき上がった画像データからノイズを取る方法の2つに分か れます。 〔シェーディング(shading)〕 物体の色を構成する要素を組み合わせて,ディスプレイに表示されるその物 体の色を決めること。いろいろなアルゴリズムがあります。 〔Zバッファ法,スキャンライン法〕 レイトレーシングとはまた異なる,レンダリングアルゴリズム。商業CGの 世界では,レイトレーシングより多用されています。 そのほか,レンダリングに関する新しい技術として,「双方向レイトレーシ ング」「ラジオシティ法」という言葉も,内容はともかく,覚えておいて損は ないでしょう。 なお,数多くのCGに関する書物の中で,レイトレーシングおよびその周辺 のアルゴリズムが紹介されています。興味をもたれた方はぜひ参考にしてくだ さい。もちろん,若干の数学的素養を必要とすることはいうまでもありません。 レイトレーシングを理解するための基礎知識としての「ベクトル」や「微分・ 積分」について語るのはこの簡易辞典の責務ではない(語り得るわけもない), ということです。